﻿using System;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Haidou.Wpf.Util.Converters
{
	public class StringHelper
	{

		//

		/// <summary>
		/// 字符串去除重复
		/// </summary>
		/// <param name="str"></param>
		/// <returns></returns>
		public static string StringEliminateDuplicate(string str)
		{
			string? strArray = str.Distinct().ToString(); //字符去重

			return string.Join(string.Empty, strArray); //字符成串
		}


		/// <summary>
		/// 去掉 （） 中的内容
		/// </summary>
		/// <param name="input"></param>
		/// <returns></returns>
		public static string RemoveParenthesesContent(string input)
		{
			string pattern = @"\((.*?)\)"; // 匹配任何在括号内的内容
			Regex regex = new(pattern);
			return regex.Replace(input, ""); // 删除匹配到的内容
		}


		/// <summary>
		/// 去掉类似版本号这种字符，  1.00
		/// </summary>
		/// <param name="input"></param>
		/// <returns></returns>
		public static string RemoveVersionNumbers(string input)
		{
			string pattern = @"\b\d+\.\d+(\.\d+)?\b"; // 匹配数字点数字的组合（可能包含额外的小数点）
			Regex regex = new(pattern);
			return regex.Replace(input, ""); // 删除匹配到的版本号
		}

		/// <summary>
		/// 去掉类似版本号这种字符，  1.0.0.5
		/// </summary>
		/// <param name="input"></param>
		/// <returns></returns>
		public static string RemoveVersionNumberss(string input)
		{
			string pattern = @"\b\d+\.\d+(\.\d+)+(\.\d+)?\b"; // 匹配数字点数字的组合（可能包含额外的小数点）
			Regex regex = new(pattern);
			return regex.Replace(input, ""); // 删除匹配到的版本号
		}



		public static string RemoveCommonCharacters(string str1, string str2)
		{
			// 将两个字符串转换为字符数组
			char[] charArray1 = str1.ToCharArray();
			char[] charArray2 = str2.ToCharArray();

			// 创建一个StringBuilder对象，用于存储不相同的字符
			StringBuilder result = new();

			// 遍历第一个字符串的每个字符
			foreach (char c in charArray1)
			{
				// 判断第二个字符串中是否包含当前字符
				if (!charArray2.Contains(c))
				{
					// 如果不包含，则将该字符添加到结果中
					result.Append(c);
				}
			}

			// 返回结果字符串
			return result.ToString();
		}


		/// <summary>
		/// 移除指定长度字符  根据传入长度删除
		/// </summary>
		/// <param name="originalString"></param>
		/// <param name="lengthToRemove"></param>
		/// <returns></returns>
		public static string RemoveSubstring(string originalString, int lengthToRemove)
		{
			try
			{
				//识别结果如果不包含直接结束  返回识别结果 说明不一样


				if (originalString.Length < lengthToRemove)
				{
					//Debug.WriteLine("return originalString Length<lengthToRemove");
					return originalString;

				}


				return originalString == null || lengthToRemove <= 0 ? originalString : originalString.Substring(lengthToRemove);
			}
			catch (Exception ex)
			{
				Debug.WriteLine(ex);
				return "";
			}

		}

		/// <summary>
		///  返回新旧字符串的差异位置      
		/// </summary>
		/// <param name="oldString"></param>
		/// <param name="newString"></param>
		/// <returns></returns>
		public static int FindDifferencesPosition(string oldString, string newString)
		{
			try
			{
				int minLength = Math.Min(oldString.Length, newString.Length);
				int index = 0;
				while (index < minLength && oldString[index] == newString[index])
				{
					index++;
				}

				return index;
			}
			catch (Exception ex)
			{
				Debug.WriteLine(ex);
				LogWriter.Log($"ERR :{ex.Message}");
				return 0;
			}

		}


		/// <summary>
		/// 返回两个字符相似度  0.9 不区分大小写
		/// </summary>
		/// <param name="sourceString"></param>
		/// <param name="str"></param>
		/// <returns></returns>
		public static double GetSimilarityWith(string sourceString, string str)
		{
			try
			{
				sourceString = sourceString.ToLower();
				str = str.ToLower();
				decimal Kq = 2;
				decimal Kr = 1;
				decimal Ks = 1;

				char[] ss = sourceString.ToCharArray();
				char[] st = str.ToCharArray();

				//获取交集数量
				int q = ss.Intersect(st).Count();
				int s = ss.Length - q;
				int r = st.Length - q;
				decimal res = Kq * q / ((Kq * q) + (Kr * r) + (Ks * s));
				double res1 = Convert.ToDouble(res);

				double roundedValue = Math.Round(res1, 1);
				return roundedValue;
			}
			catch (Exception ex)
			{
				Debug.WriteLine(ex);
				LogWriter.Log($"ERR :{ex.Message}");
				return 0;

			}

		}


		/// <summary>
		/// 
		/// </summary>
		/// <param name="sourceString"></param>
		/// <param name="str"></param>
		/// <returns></returns>
		public static string Del(string sourceString, string delimiter)
		{
			try
			{


				int index = sourceString.IndexOf(delimiter); // 查找指定字符的位置

				if (index != -1) // 如果找到指定字符
				{
					string result = sourceString.Substring(index).Replace(delimiter, ""); // 从找到的位置开始截取

					return result; // 输出: 以管理员的身份打开CMD。
				}
				else
				{
					Debug.WriteLine("指定字符未找到");
					return sourceString;

				}
			}
			catch (Exception ex)
			{
				Debug.WriteLine(ex);
				LogWriter.Log($"ERR :{ex.Message}");
				return "";

			}

		}



		public static string ByteArrayToHexWithoutEncoding(byte[] data)
		{
			if (data == null || data.Length < 13) // 检查数据是否至少有13个字节
			{
				return "数据不足";
			}

			// 创建一个新的StringBuilder，用于拼接十六进制字符串
			StringBuilder hexBuilder = new();

			// 从第13个字节开始，到数组末尾
			for (int i = 13; i < data.Length - 1; i++) // 注意索引从0开始，所以第13个字节的索引是12
			{
				hexBuilder.Append(data[i].ToString("x2"));
			}

			return hexBuilder.ToString(); // 返回拼接好的十六进制字符串
		}

		public static string IsGreaterThanOneHundred(string value)
		{
			try
			{
				bool isNumberValid = int.TryParse(value, out int number);

				return isNumberValid && number > 100 ? "" : value;
			}
			catch (Exception)
			{
				return "";

			}



		}
	}





}
